CTF 总结01:文件上传绕过

您所在的位置:网站首页 php filesize失败原因 CTF 总结01:文件上传绕过

CTF 总结01:文件上传绕过

2024-01-09 16:16| 来源: 网络整理| 查看: 265

问题描述

(⌐■_■)在做图片马上传的题目,发现自己折腾很久,终于成功达到了抽刀断水、南辕北辙的效果~距离正确的WP仅有一部西游记那么长——

没关系,菜鸟做题就是这样屡败屡战~失败是成功的山顶洞人,也只能这么安慰自己辽~

但是,在解题过程中发现了其他的上传绕过思路,在这里梳理一下,说不定以后能用得到~本次是第二版啦,还会根据做题经验增补的~

祭出图片:白龙马镇文~保佑我的CTF图片马题目可以顺利通过,阿弥陀佛~

(●'◡'●)施法结束,正文开始~

思路分析:

文件上传解题思路就很传统:举起菜刀、蚁剑、冰蝎、哥斯拉往页面的脸上砸过去就行了~

本篇想测试的内容仅有两条:

1.穿新马甲的一句话木马连接蚁剑;

2.骑图片马的一句话木马连接蚁剑。

解决方案:

工具:蚁剑、Burpsuite

靶场:DVWA在线 Vulnerability: File Upload  或者 用虚拟机+phpstudy当作靶场~

————————————————————————

0 前言

参考1:ctf.show_墨子轩、的博客-CSDN博客_蚁剑返回数据为空

参考2:蚁剑连接不上远程shell的解决办法_大河下。的博客-CSDN博客

测试过程中,蚁剑连接补上的可能原因如下~

①如果返回一长串红色框报错,那就是连接地址写错了;

②如果返回地址为空的黄色框报错,那就是写错文件或者包在上传过程中被WAF改掉或是拦截了;

可以试试BurpSuite抓包分析一下上传前后的内容是否有变化~如果上传内容没有被改掉、防火墙也没有问题,那就再仔细检查一下代码的内容吧~

————————————————————————

1 朴实无华的一句话木马

这个在没有防火墙盯着的情况下必然成功,但是...哪个不正经的网站会没有防火墙呢,做贼还是要讲一点技术含量的~

2 穿上马甲的一句话木马

查阅资料,以下是一些市面上常见的马甲款式——

————————————————————————————————

WEBSHELL免杀绕过WAF思路&方法(一) - 知乎 (zhihu.com)

php一句话木马变形技巧_bylfsj的博客-CSDN博客_一句话木马phpinfo

↑这两篇博文主要是替换与拼接函数绕过,均有代码段~其中第一篇对于原理的介绍多一些~

————————————————————————————————

一句话木马绕过检测的常见思路_si1ence_whitehat的博客-CSDN博客_一句话木马绕过

↑这一篇博文里有编码绕过的代码段,最后用主流的杀毒软件测试了一下效果~

————————————————————————————————

(1)php短标签,绕过的过滤;

php中最常见的标签为,不过在题目上传时这种可能会被过滤掉。根据查询结果,还有三种php的标签,分别是:

① 需要配置short_open_tag,适合执行php语句; 或许不需要配置,或许可以不闭合(就是只写连接成功~连接成功~

这个我使用蚁剑连接失败了...切换php5版本、php7版本都是失败的...

php官方手册中关于assert的用法:如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行~PHP: assert - Manual,注意参数assertion一栏的注解——

——————

如果替换的函数使用create_function,此函数在内部执行 eval(),这个是成功的!但也要注意版本,8.0.0以后就不会成功了(7.2.0~8.0.0中间的版本可以执行)~PHP: create_function - Manual

emm...call_user_func是调用回调函数,每当我看到他的说明就会很绕...简而言之这个与assert(@$_POST['a']);效果是相近的 ,实际连接也是失败的~顺便一提,把assert改成eval以后,也没有成功~

//:$a['internal'][841]表示的是assert

 至于这个异曲同工,连接也是失败的~

 这个是用数组的方式为每个元素回调函数,效果与call_user_func也是类似的~连接是失败的~改成eval以后也是失败的~

——————

preg_replace是执行一个正则表达式的搜索和替换,在参数$replacement中存在eval执行作用。这个在php5中执行成功了~但是在php7中提示为空、在php8中提示错误~

 但是类似的写法,这样子连接是失败的,因为用到了变量作为执行函数~

 ——————

parse_str — 将字符串解析成多个变量,以下是官方手册,看来在php8以后也不太好用了~不过在php5、php7中我这里也没有连接成功~PHP: parse_str - Manual

 (3)字符组合+变量函数,绕过执行函数的简单过滤; 

 以变量作为函数,这个连接失败了~看来用可变变量绕过的方法现在不太香了...

“.”在php种属于并置运算,可以连接两个字符串,“{}”也可以实现相同的功能,详PHP: 字符串运算符 - Manual~

我可以理解这个代码的逻辑,但是连接失败了~无论$c前是否有@,都失败了~

 这个是用数组的方式组合,我这边同样也连接失败了~

 (4)字符编码与混淆绕过试一试...

 这个代码里因为用到了可变变量替换方式,所以同样失败了~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3